//
//  pedagio.cpp
//  complexidade
//  http://br.spoj.pl/problems/PEDAGIO/
//  Created by Bruno Dias on 10/06/11.
//  Copyright 2011 __MyCompanyName__. All rights reserved.
//

/* 
 Exercício baseado nesse material http://www.ime.usp.br/~pf/algoritmos_para_grafos/
 */

#include <iostream>
#include <string.h>

#define CIDADES 51
using namespace std;

int main() {
    int MatrizAdj[CIDADES][CIDADES]; //Usando matriz de adjacência para definir as arestas do grafo
    int cidades, estradas, partida, pedagio;
    int test = 1;
    
    cin >> cidades >> estradas >> partida >> pedagio;
    while (cidades > 0 && estradas > 0 && partida > 0 && pedagio > 0) {
        int x, y;
        int fila[CIDADES], CidadesVis[CIDADES]; 
        
        memset(MatrizAdj, 0, sizeof(MatrizAdj)); //preenche a matriz de adjacência com zeros
        memset(CidadesVis, 0, sizeof(CidadesVis)); //preenche a lista de cidades visitadas com zeros
        
        for (int i = 0; i < estradas; i++) {
            cin >> x >> y;
            MatrizAdj[x][y] = 1;
            MatrizAdj[y][x] = 1;
        }
        int inicio = 0;
        int fim = 1;
        CidadesVis[partida] = 0;
        fila[0] = partida;
        
        while (inicio < fim && CidadesVis[fila[inicio]] < pedagio) {
            for (int i = 0; i < cidades; i++) {
                if (MatrizAdj[i+1][fila[inicio]]) {
                    if (CidadesVis[i+1] == CidadesVis[0]) {
                        CidadesVis[i+1] = CidadesVis[fila[inicio]] + 1;
                        fila[fim] = i+1;
                        fim++;
                    }
                }
            }
            inicio++;
        }
        cout << "Teste " << test << "\n";
        for (int i = 0; i < cidades; i++) {
            if (CidadesVis[i+1] != CidadesVis[0]) {
                if (partida != i+1) {
                    cout << i+1 << " ";
                }
            }
        }
        cout << "\n\n";
        cin >> cidades >> estradas >> partida >> pedagio;
        test++;
    }
}